home *** CD-ROM | disk | FTP | other *** search
- /* Various I/O definitions specific to asynch I/O on the IBM PC */
-
- extern unsigned nasy; /* Actual number of asynch lines */
- extern unsigned nhandlers ; /* Number of interrupt handlers used for them */
-
- /* Output pseudo-dma control structure */
- struct dma {
- char *data; /* current output pointer */
- unsigned short cnt; /* byte count remaining */
- char last_octet; /* previously output octet */
- char flags; /* transmitter active */
- };
-
- /* Read fifo control structure */
- struct fifo {
- char *buf; /* Ring buffer */
- unsigned bufsize; /* Size of ring buffer */
- char *wp; /* Write pointer */
- char *rp; /* Read pointer */
- unsigned short cnt; /* count of characters in buffer */
- };
-
- /* Asynch controller control block */
- struct asy {
- struct fifo fifo;
- struct dma dma;
- unsigned addr; /* Base I/O address */
- unsigned vec; /* Interrupt vector */
- unsigned speed; /* Line speed */
- struct asy *ichain ;/* Next asy in interrupt vector chain */
- unsigned (*urgent)(); /* Handler for urgent transmission */
- struct { /* Previous configuration saved at startup */
- char divh,divl; /* baud rate divisor */
- char lcr; /* line control reg */
- char ier; /* Interrupt enable register */
- char mcr; /* modem control bits */
- } save;
- };
- extern struct asy asy[];
-
- #define NULLASY (struct asy *)0
-
- /* Interrupt vector structure */
- struct ivec {
- void (*oldvec)() ; /* Original interrupt vector [cs:pc] */
- char oldmask; /* Original 8259 mask */
- unsigned refcnt ; /* How many asy's are using this int? */
- struct asy *ichain ; /* First asy in chain for this int */
- } ;
-
- #define NIVECS 16
-
- extern struct ivec ivec[] ;
-
- extern unsigned h2ivec[] ; /* map from handlers to vectors */
-
- #define BAUDCLK 115200L /* 1.8432 Mhz / 16 */
-
- /* 8250 definitions */
- /* Control/status register offsets from base address */
- #define THR 0 /* Transmitter holding register */
- #define RBR 0 /* Receiver buffer register */
- #define DLL 0 /* Divisor latch LSB */
- #define DLM 1 /* Divisor latch MSB */
- #define IER 1 /* Interrupt enable register */
- #define IIR 2 /* Interrupt ident register */
- #define LCR 3 /* Line control register */
- #define MCR 4 /* Modem control register */
- #define LSR 5 /* Line status register */
- #define MSR 6 /* Modem status register */
-
- /* 8250 Line Control Register */
- #define LCR_5BITS 0 /* 5 bit words */
- #define LCR_6BITS 1 /* 6 bit words */
- #define LCR_7BITS 2 /* 7 bit words */
- #define LCR_8BITS 3 /* 8 bit words */
- #define LCR_NSB 4 /* Number of stop bits */
- #define LCR_PEN 8 /* Parity enable */
- #define LCR_EPS 0x10 /* Even parity select */
- #define LCR_SP 0x20 /* Stick parity */
- #define LCR_SB 0x40 /* Set break */
- #define LCR_DLAB 0x80 /* Divisor Latch Access Bit */
-
- /* 8250 Line Status Register */
- #define LSR_DR 1 /* Data ready */
- #define LSR_OE 2 /* Overrun error */
- #define LSR_PE 4 /* Parity error */
- #define LSR_FE 8 /* Framing error */
- #define LSR_BI 0x10 /* Break interrupt */
- #define LSR_THRE 0x20 /* Transmitter line holding register empty */
- #define LSR_TSRE 0x40 /* Transmitter shift register empty */
-
- /* 8250 Interrupt Identification Register */
- #define IIR_IP 1 /* 0 if interrupt pending */
- #define IIR_ID 6 /* Mask for interrupt ID */
- #define IIR_RLS 6 /* Receiver Line Status interrupt */
- #define IIR_RDA 4 /* Receiver data available interrupt */
- #define IIR_THRE 2 /* Transmitter holding register empty int */
- #define IIR_MSTAT 0 /* Modem status interrupt */
-
- /* 8250 interrupt enable register bits */
- #define IER_DAV 1 /* Data available interrupt */
- #define IER_TxE 2 /* Tx buffer empty interrupt */
- #define IER_RLS 4 /* Receive line status interrupt */
- #define IER_MS 8 /* Modem status interrupt */
-
- /* 8250 Modem control register */
- #define MCR_DTR 1 /* Data Terminal Ready */
- #define MCR_RTS 2 /* Request to Send */
- #define MCR_OUT1 4 /* Out 1 (not used) */
- #define MCR_OUT2 8 /* Master interrupt enable (actually OUT 2) */
- #define MCR_LOOP 0x10 /* Loopback test mode */
-
- /* 8250 Modem Status Register */
- #define MSR_DCTS 1 /* Delta Clear-to-Send */
- #define MSR_DDSR 2 /* Delta Data Set Ready */
- #define MSR_TERI 4 /* Trailing edge ring indicator */
- #define MSR_DRLSD 8 /* Delta Rx Line Signal Detect */
- #define MSR_CTS 0x10 /* Clear to send */
- #define MSR_DSR 0x20 /* Data set ready */
- #define MSR_RI 0x40 /* Ring indicator */
- #define MSR_RLSD 0x80 /* Received line signal detect */
-
-